<?php


namespace app\back\controller;


use app\back\model\GoodsModel;
use app\common\Image;
use app\middleware\BackAuth;
use think\facade\Validate;
use app\Request;
use think\response\Json;
use think\validate\ValidateRule;

class Goods
{
    protected $middleware = [BackAuth::class];

    /**获取添加编辑额外信息
     * @param Request $request
     * @return Json
     */
    public function getOther(Request $request)
    {
        // 逻辑处理
        return GoodsModel::getOther($request->info);
    }

    /**添加商品
     * @param Request $request
     * @return Json
     */
    public function add(Request $request)
    {
        // 获取参数
        $input['cate_path'] = $request->post('cate_path');
        $input['center_id'] = $request->post('center_id');
        $input['unit_id'] = $request->post('unit_id');
        $input['image'] = $request->file('image');
        $input['info'] = $request->post('info');
        $input['is_good'] = $request->post('is_good');
        $input['is_hot'] = $request->post('is_hot');
        $input['is_new'] = $request->post('is_new');
        $input['is_activity'] = $request->post('is_activity');
        $input['name'] = $request->post('name');
        $input['ot_price_percent'] = $request->post('ot_price_percent');//非授信百分比
        $input['price_percent'] = $request->post('price_percent');//授信百分比
        $input['act_price'] = $request->post('act_price');//活动价
        $input['pur_price'] = $request->post('pur_price');//采购价
        $input['sort'] = $request->post('sort');
        // 参数校验
        $validate = Validate::rule([
            'cate_path' => function ($value) {
                return count(explode(',', $value)) === 3 ? true : '不合法数据';
            },
            'center_id' => ValidateRule::isRequire(null, '缺少参数'),
            'unit_id' => ValidateRule::isRequire(null, '缺少参数'),
            'image' => ValidateRule::isRequire(null, '请上传图片'),
            'info' => ValidateRule::isRequire(null, '缺少参数'),
            'is_good' => function ($value) {
                return in_array($value, ['true', 'false'], true) ? true : '不合法数据';
            },
            'is_hot' => function ($value) {
                return in_array($value, ['true', 'false'], true) ? true : '不合法数据';
            },
            'is_new' => function ($value) {
                return in_array($value, ['true', 'false'], true) ? true : '不合法数据';
            },
            'is_activity' => function ($value) {
                return in_array($value, ['true', 'false'], true) ? true : '不合法数据';
            },
            'name' => ValidateRule::isRequire(null, '缺少参数'),
            'ot_price_percent' => ValidateRule::isRequire(null, '缺少参数'),
            'act_price' => ValidateRule::isRequire(null, '缺少参数'),
            'pur_price' => ValidateRule::isRequire(null, '缺少参数'),
            'price_percent' => ValidateRule::isRequire(null, '缺少参数'),
            'sort' => ValidateRule::isRequire(null, '缺少参数'),
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        $input['prefixUrl'] = $request->scheme() . '://' . $request->host();
        return GoodsModel::add($input, $request->info);
    }

    public function list(Request $request)
    {
        // 获取参数
        $input['limit'] = $request->post('limit');
        $input['page'] = $request->post('page');
        $input['name'] = $request->post('name');
        $input['status'] = $request->post('status');
        $input['cate_ids'] = $request->post('cate_ids');
        $input['unit_type'] = $request->post('unit_type');
        $input['is_activity'] = $request->post('is_activity');
        // 参数校验
        $validate = Validate::rule([
            'limit' => ValidateRule::isRequire(null, '缺少参数'),
            'page' => ValidateRule::isRequire(null, '缺少参数'),
            'name' => function ($value) {
                return $value === null ? '缺少参数' : true;
            },
            'cate_ids' => function ($value) {
                if ($value === null) {
                    return '缺少参数';
                } else if ($value === '') {
                    return true;
                } else if (count(explode(',', $value)) == 3) {
                    return true;
                } else {
                    return '不合法数据';
                }
            },
            'status' => function ($value) {
                return in_array($value, ['', '1', '2'], true) ? true : '不合法数据';
            },
            'unit_type' => function ($value) {
                return in_array($value, ['', '1', '2'], true) ? true : '不合法数据';
            },
            'is_activity' => function ($value) {
                return in_array($value, ['', '0', '1'], true) ? true : '不合法数据';
            }
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return GoodsModel::list($input, $request->info);
    }

    /**获取搜索分类（1到3级）列表
     * @param Request $request
     * @return Json
     */
    public function getCategorySimpleList(Request $request)
    {
        // 逻辑处理
        return GoodsModel::getCategorySimpleList($request->info);
    }

    /**修改商品状态
     * @param Request $request
     * @return Json
     */
    public function changeStatus(Request $request)
    {
        // 获取参数
        $input['id'] = $request->post('id');
        $input['status'] = $request->post('status');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::isRequire(null, '缺少参数'),
            'status' => function ($value) {
                return in_array($value, ['1', '2'], true) ? true : '不合法数据';
            }
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return GoodsModel::changeStatus($input, $request->info);
    }

    /**修改商品热卖|新品|优品推荐状态
     * @param Request $request
     * @return Json
     */
    public function changeIsStatus(Request $request)
    {
        // 获取参数
        $input['id'] = $request->post('id');
        $input['is_name'] = $request->post('is_name');
        $input['is_status'] = $request->post('is_status');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::isRequire(null, '缺少参数'),
            'is_name' => function ($value) {
                return in_array($value, ['is_new', 'is_hot', 'is_good','is_activity'], true) ? true : '不合法数据';
            },
            'is_status' => function ($value) {
                return in_array($value, ['1', '0'], true) ? true : '不合法数据';
            }
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return GoodsModel::changeIsStatus($input, $request->info);
    }

    /**删除（软删除）
     * @param Request $request
     * @return Json
     */
    public function del(Request $request)
    {
        // 获取参数
        $input['id'] = $request->post('id');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::isRequire(null, '缺少参数')
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return GoodsModel::del($input, $request->info);
    }

    /**获取单个信息
     * @param Request $request
     * @return Json
     */
    public function getOnly(Request $request)
    {
        // 获取参数
        $input['id'] = $request->post('id');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::isRequire(null, '缺少参数')
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return GoodsModel::getOnly($input, $request->info);
    }

    /**编辑信息
     * @param Request $request
     * @return Json
     */
    public function edit(Request $request)
    {
        // 获取参数
        $input['id'] = $request->post('id');
        $input['cate_path'] = $request->post('cate_path');
        $input['center_id'] = $request->post('center_id');
        $input['unit_id'] = $request->post('unit_id');
        $input['image'] = $request->file('image');
        $input['info'] = $request->post('info');
        $input['name'] = $request->post('name');
        $input['ot_price_percent'] = $request->post('ot_price_percent');
        $input['act_price'] = $request->post('act_price');
        $input['pur_price'] = $request->post('pur_price');
        $input['price_percent'] = $request->post('price_percent');
        $input['sort'] = $request->post('sort');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::isRequire(null, '缺少参数'),
            'cate_path' => function ($value) {
                return count(explode(',', $value)) === 3 ? true : '不合法数据';
            },
            'center_id' => ValidateRule::isRequire(null, '缺少参数'),
            'unit_id' => ValidateRule::isRequire(null, '缺少参数'),
//            'image' => ValidateRule::isRequire(null, '请上传图片'),
            'info' => ValidateRule::isRequire(null, '缺少参数'),
            'name' => ValidateRule::isRequire(null, '缺少参数'),
            'ot_price_percent' => ValidateRule::isRequire(null, '缺少参数'),
            'act_price' => ValidateRule::isRequire(null, '缺少参数'),
            'pur_price' => ValidateRule::isRequire(null, '缺少参数'),
            'price_percent' => ValidateRule::isRequire(null, '缺少参数'),
            'sort' => ValidateRule::isRequire(null, '缺少参数'),
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理]
        return GoodsModel::edit($input, $request->info, $request->scheme() . '://' . $request->host());
    }

    /**获取详情
     * @param Request $request
     * @return Json
     */
    public function getDesc(Request $request)
    {
        // 获取参数
        $input['id'] = $request->post('id');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::isRequire(null, '缺少参数')
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return GoodsModel::getDesc($input, $request->info);
    }


    /**富文本添加图片
     * @param Request $request
     * @return Json
     */
    public function uploadEditorImg(Request $request)
    {
        // 获取参数
        $input['image'] = $request->file('image');
        // 参数校验
        $validate = Validate::rule([
            'image' => ValidateRule::isRequire(null, '缺少参数')
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        $pic = Image::uploadSingle($input['image'], 'editor');
        if (!is_string($pic)) return $pic;
        return jsonSuccess('添加成功', $request->scheme() . '://' . $request->host() . '/api/uploads/' . str_replace('\\', '/', $pic));
    }

    /**编辑详情
     * @param Request $request
     * @return Json
     */
    public function editDesc(Request $request)
    {
        // 获取参数
        $input['id'] = $request->post('id');
        $input['description'] = $request->post('description');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::isRequire(null, '缺少参数'),
            'description' => ValidateRule::isRequire(null, '缺少参数'),
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return GoodsModel::editDesc($input, $request->info);
    }

    /**查看出库入库报损采购记录
     * @param Request $request
     * @return Json
     */
    public function getLogList(Request $request)
    {
        // 获取参数
        $input['limit'] = $request->post('limit');
        $input['page'] = $request->post('page');
        $input['type'] = $request->post('type');
        $input['goods_id'] = $request->post('goods_id');
        // 参数校验
        $validate = Validate::rule([
            'limit' => ValidateRule::isRequire(null, '缺少参数'),
            'page' => ValidateRule::isRequire(null, '缺少参数'),
            'type' => function ($value) {
                return in_array($value, ['1', '2', '3', '4'], true) ? true : '不合法数据';
            },
            'goods_id' => ValidateRule::regex('/^[1-9][0-9]*$/', '不合法数据'),
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return GoodsModel::getLogList($input);
    }

    /**获取商品入库记录列表
     * @param Request $request
     * @return Json
     */
    public function goodsInList(Request $request)
    {
        // 获取参数
        $input['limit'] = $request->post('limit');
        $input['page'] = $request->post('page');
        $input['start'] = $request->post('start'); // 起始时间
        $input['end'] = $request->post('end'); // 结束时间
        $input['name'] = $request->post('name'); // 分拣中心名称
        // 参数校验
        $validate = Validate::rule([
            'limit' => ValidateRule::isRequire(null, '缺少参数'),
            'page' => ValidateRule::isRequire(null, '缺少参数'),
            'start' => function ($value) {
                return checkDatetime($value,true) ? true : '时间格式不对';
            },
            'end' => function ($value) {
                return checkDatetime($value,true) ? true : '时间格式不对';
            },
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return GoodsModel::goodsInList($input, $request->info);
    }

    /**导出商品入库记录excel
     * @param Request $request
     * @return Json
     */
    public function goodsInExcel(Request $request)
    {
        // 获取参数
        $input['start'] = $request->post('start'); // 起始时间
        $input['end'] = $request->post('end'); // 结束时间
        $input['name'] = $request->post('name'); // 分拣中心名称
        // 参数校验
        $validate = Validate::rule([
            'start' => function ($value) {
                return checkDatetime($value,true) ? true : '时间格式不对';
            },
            'end' => function ($value) {
                return checkDatetime($value,true) ? true : '时间格式不对';
            },
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return GoodsModel::goodsInExcel($input, $request->info);
    }
}